var express = require('express');
var router = express.Router();
var User = require('../models/User');
var Category = require('../models/Category');
var Content = require('../models/Content');

router.use(function (req, res, next) {
    if (!req.userInfo.isAdmin) {
        res.send('只有管理员才可以进入该页面！')
        return;
    }
    next()
})
/**
 * 首页
*/
router.get('/', function (req, res) {
    res.render('admin/index', {
        userInfo: req.userInfo
    })
})
/**
 * 退出系统
 * 清除cookies
*/
router.get('/logout', function (req, res, next) {
    req.cookies.set('userInfo', null);
    // responseData.messgae = '退出成功！';
    res.json({messgae: '退出成功！'});
    return;
})
/**
 * 用户管理
*/
router.get('/user', function (req, res, next) {
    /**
     * 从数据库中读取所有的用户数据
     * limit(Number) 限制获取的数据条数
     * skip() 忽略数据的条数
    */
    var page = Number(req.query.page) || 1;
    var limit = 5;

    var pages = 0;
    User.count().then(function (count) {
        // 计算总页数
        pages = Math.ceil(count / limit);
        // 取值不能超过pages
        page = Math.min(page, pages)
        // 取值不能小于1
        page = Math.max(page, 1)

        var skip = (page - 1) * limit;
        User.find().limit(limit).skip(skip).then(function (user) {
            res.render('admin/user_index', {
                userInfo: req.userInfo,
                userList: user,
                page: page,
                pages: pages,
                count: count,
                limit: limit,
                pageName: '/user'
            })
        })
    })
})

/**
 * 分类首页
*/
router.get('/category', function (req, res, next) {
    var page = Number(req.query.page) || 1;
    var limit = 5;

    var pages = 0;
    Category.count().then(function (count) {
        // 计算总页数
        pages = Math.ceil(count / limit);
        // 取值不能超过pages
        page = Math.min(page, pages)
        // 取值不能小于1
        page = Math.max(page, 1)
        /**
         * find:查询
         * sort：排序 1->升序，-1->降序
         * limit： 分页
         * skip：翻页
        */
        var skip = (page - 1) * limit;
        Category.find().sort({ _id: -1 }).limit(limit).skip(skip).then(function (cate) {
            res.render('admin/category_index', {
                userInfo: req.userInfo,
                cateList: cate,
                page: page,
                pages: pages,
                count: count,
                limit: limit,
                pageName: '/category'
            })
        })
    })
})

/**
 * 添加分类-页面
*/
router.get('/category/add', function (req, res, next) {
    res.render('admin/category_add', {
        userInfo: req.userInfo,
    })
})

/**
 * 保存分类-接口
*/
router.post('/category/add', function (req, res, next) {
    var name = req.body.name;
    // 数据库中是否已经存在同名分类名称
    Category.findOne({
        name: name
    }).then(function (rs) {
        if (rs) {
            // 数据库中已存在该分类
            res.render('admin/error', {
                userInfo: req.userInfo,
                message: '已存在该分类！'
            })
            return Promise.reject()
        } else {
            // 不存在，则保存
            return new Category({
                name: name
            }).save()
        }
    }).then(function (cate) {
        res.render('admin/success', {
            userInfo: req.userInfo,
            message: '分类保存成功！',
            url: '/admin/category'
        })
    })
})
/**
 * 分类修改
*/
router.get('/category/edit', function (req, res) {
    // 获取分类消息
    var id = req.query.id || '';
    // 查询此分类的详情
    Category.findOne({
        _id: id
    }).then(function (cate) {
        if (!cate) {
            // 数据库中已存在该分类
            res.render('admin/error', {
                userInfo: req.userInfo,
                message: '该分类信息不存在！'
            })
            return Promise.reject()
        } else {
            // 正常显示
            res.render('admin/category_edit', {
                userInfo: req.userInfo,
                cate: cate
            })
        }
    })

})

/**
 * 编辑保存分类-接口
*/
router.post('/category/edit', function (req, res) {
    // 获取要修改的分类的信息，并且用表单的形式展现出来
    var id = req.query.id || '';
    // 获取post提交过来的名称
    var name = req.body.name;

    // 数据库中是否已经存在同名分类名称
    Category.findOne({
        _id: id
    }).then(function (rs) {
        if (!rs) {
            // 数据库中已存在该分类
            res.render('admin/error', {
                userInfo: req.userInfo,
                message: '分类信息不存在！'
            })
            return Promise.reject()
        } else {
            if (name == rs.name) {
                // 当用户没有做修改而提交表单
                res.render('admin/success', {
                    userInfo: req.userInfo,
                    message: '分类修改成功！',
                    url: '/admin/category'
                })
                return Promise.reject();
            } else {
                // 要修改的分类名称是否已经在数据库中
                return Category.findOne({
                    _id: { $ne: id },
                    name: name
                })
            }
        }
    }).then(function (sameCate) {
        if (sameCate) {
            res.render('admin/error', {
                userInfo: req.userInfo,
                message: '数据库中已存在同名分类！'
            })
            return Promise.reject();
        } else {
            return Category.updateOne({
                _id: id
            }, {
                name: name
            })
        }
    }).then(function () {
        res.render('admin/success', {
            userInfo: req.userInfo,
            message: '分类修改成功！',
            url: '/admin/category'
        })
    })
})
/**
 * 分类删除
*/
router.get('/category/delete', function (req, res) {
    var id = req.query.id || '';
    Category.deleteOne({
        _id: id
    }).then(function () {
        res.render('admin/success', {
            userInfo: req.userInfo,
            message: '删除成功！',
            url: '/admin/category'
        })
    })
})

/**
 * 内容首页
*/
router.get('/content', function (req, res) {
    var page = Number(req.query.page) || 1;
    var limit = 5;

    var pages = 0;
    Content.count().then(function (count) {
        // 计算总页数
        pages = Math.ceil(count / limit);
        // 取值不能超过pages
        page = Math.min(page, pages)
        // 取值不能小于1
        page = Math.max(page, 1)
        /**
         * find:查询
         * sort：排序 1->升序，-1->降序
         * limit： 分页
         * skip：翻页
        */
        var skip = (page - 1) * limit;
        Content.find().sort({ _id: -1 }).limit(limit).skip(skip).populate(['category', 'user']).then(function (content) {
            res.render('admin/content_index', {
                userInfo: req.userInfo,
                contentList: content,
                page: page,
                pages: pages,
                count: count,
                limit: limit,
                pageName: '/content'
            })
        })
    })
})

/**
 * 文章添加
*/
router.get('/content/add', function (req, res) {
    Category.find().sort({ id: -1 }).then(function (cate) {
        res.render('admin/content_add', {
            userInfo: req.userInfo,
            cateList: cate
        })
    })
})

/**
 * 保存文章-接口
*/
router.post('/content/add', function (req, res) {
    var formData = req.body;
    if (formData.category == '') {
        res.render('admin/error', {
            userInfo: req.userInfo,
            message: '内容所属分类不能为空！'
        })
        return
    }
    if (formData.title == '') {
        res.render('admin/error', {
            userInfo: req.userInfo,
            message: '内容标题不能为空！'
        })
        return
    }
    // 保存数据到数据库
    new Content({
        category: formData.category,
        title: formData.title,
        user: req.userInfo._id.toString(),
        addTime: new Date(),
        views: 0,
        description: formData.description,
        content: formData.content
    }).save().then(function (rs) {
        if (rs) {
            res.render('admin/success', {
                userInfo: req.userInfo,
                message: '保存成功！',
                url: '/admin/content'
            })
        }
    })
})

/**
 * 文章修改-信息回显
*/
router.get('/content/edit', function (req, res) {
    // 获取分类消息
    var id = req.query.id || '';
    var cateList = [];
    Category.find().sort({ id: -1 }).then(function (rs) {
        cateList = rs
        // 查询此分类的详情
        return Content.findOne({
            _id: id
        }).populate('category')
    }).then(function (con) {
        if (!con) {
            // 数据库中不存在该分类
            res.render('admin/error', {
                userInfo: req.userInfo,
                message: '该文章不存在！'
            })
            return Promise.reject()
        } else {
            // 正常显示
            res.render('admin/content_edit', {
                userInfo: req.userInfo,
                cateList: cateList,
                con: con
            })
        }
    })
})

/**
 * 编辑文章-接口
*/
router.post('/content/edit', function (req, res) {
    var formData = req.body;
    var id = req.query.id;
    if (formData.category == '') {
        res.render('admin/error', {
            userInfo: req.userInfo,
            message: '内容所属分类不能为空！'
        })
        return
    }
    if (formData.title == '') {
        res.render('admin/error', {
            userInfo: req.userInfo,
            message: '内容标题不能为空！'
        })
        return
    }
    // 保存数据到数据库
    Content.updateOne({_id: id},{
        category: formData.category,
        title: formData.title,
        description: formData.description,
        content: formData.content
    }).then(function (rs) {
        if (rs) {
            res.render('admin/success', {
                userInfo: req.userInfo,
                message: '修改成功！',
                url: '/admin/content'
            })
        }
    })
})

/**
 * 文章删除
*/
router.get('/content/delete', function (req, res) {
    var id = req.query.id || '';
    Content.deleteOne({
        _id: id
    }).then(function () {
        res.render('admin/success', {
            userInfo: req.userInfo,
            message: '删除成功！',
            url: '/admin/content'
        })
    })
})

module.exports = router